package com.uam.core.lk.utils.random;

import java.util.HashSet;
import java.util.Random;

/**
 * 
 * @ClassName:  LKToolsUtil   
 * @Description:  基本工具处理类
 * @author: zhangxj
 * @date:   2019年2月1日 下午12:20:51   
 *     
 * @Copyright: 2019 www.luokung.com Inc. All rights reserved. 
 * 注意：本内容仅限于箩筐科技内部传阅，禁止外泄以及用于其他的商业目
 */
public class LkRandomUtils {

	/**
	 * 
	 * @Title: getRandom
	 * @author: zhangxj     
	 * @date:   2019年2月1日 下午12:21:26    
	 * @Description: 获取随机数  
	 * 获取两个正整数数值范围的随机数 
	 * @param: @param max
	 * @param: @param min
	 * @param: @return      
	 * @return: int      
	 * @throws
	 */
    public static int getRandom(int max, int min){
    	if(max < 0){
    		max = 0;
    	}
    	if(min < 0){
    		min= 0;
    	}
    	if(min== 0 && max == 0){
    		return 0;
    	}
    	if(min > max){
    		int temp = max;
    		max = min;
    		min = temp;
    	}
    	Random random = new Random();
        return random.nextInt(max)%(max-min+1) + min;
    }
	
    /**
     * 
     * @Title: randomSet
     * @author: zhangxj     
     * @date:   2019年2月1日 下午12:21:42    
     * @Description: 随机指定范围内N个不重复的数 
	 * 利用HashSet的特征，只能存放不同的值
     * @param: @param min 指定范围最小值
     * @param: @param max 指定范围最大值 
     * @param: @param n 剩余填充数据的随机数个数
     * @param: @param set 随机数结果集
     * @param: @param counts 随机数个数
     * @return: void      
     * @throws
     */
	 public static void randomSet(int min, int max, int n, HashSet<Integer> set, int counts) {  
       if (n > (max - min + 1) || max < min) {
    	   return;  
       }  
       for (int i = 0; i < n; i++) {
           // 调用Math.random()方法  
	       int num = (int) (Math.random() * (max - min)) + min;  
	       set.add(num);// 将不同的数存入HashSet中  
       }  
	   int setSize = set.size();  
	   // 如果存入的数小于指定生成的个数，则调用递归再生成剩余个数的随机数，如此循环，直到达到指定大小  
	   if (setSize != counts) {  
		   randomSet(min, max, counts - setSize, set, counts);// 递归  
	   }  
	} 
	public static void main(String[] args){
		HashSet<Integer> set = new HashSet<>();
		
		randomSet(0,4,2,set, 2);
		
		System.out.println(set);
		for (int i = 0; i < 500; i++) {
			if (getRandom(2, 0) ==2) {
				System.out.println("111111111111111111");
			}
			System.out.println(getRandom(2, 0));
		}
		
	}
}
